package utils.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

public class DateUtils {
	
	public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
	public static final String YYYYMMDD = "yyyy-MM-dd";
	public static final String TIMESTAMP = "yyyy-MM-dd HH:mm:ss";
	
	/**
	 * 获取当前时间戳
	 * @return
	 * @author yanghao
	 * 2015年6月19日 上午9:34:21
	 */
	public static String getCurrentDateTimeStr(String format){
		SimpleDateFormat sd = null;
		if(format.equals(YYYYMMDDHHMMSS)){
			sd = new SimpleDateFormat(YYYYMMDDHHMMSS);
			return sd.format(new Date());
		}else{
			sd = new SimpleDateFormat(format);
			return sd.format(new Date());
		}
	}
	/**
	 * 默认返回YYYYMMDDHHmmss格式
	 * @return
	 * @author yanghao
	 * 2015年6月19日 上午9:39:29 
	 */
	public static String getCurrentDateTimeStr(){
		SimpleDateFormat sd = new SimpleDateFormat(YYYYMMDDHHMMSS);
		return sd.format(new Date());
	}
	/**
	 * 获取当前时间戳yyyy-MM-dd HH:mm:ss
	 * @return
	 * 2015年9月23日 下午3:26:46
	 * @auth huan208050@vip.qq.com
	 */
	public static String getCurrentTimeStamp(){
		SimpleDateFormat sd = new SimpleDateFormat(TIMESTAMP);
		return sd.format(new Date());
	}
	
	
	/**
	 * 默认方式转换时间
	 * @param date
	 * @return
	 * @author yanghao
	 * 2015年6月19日 上午11:31:59
	 */
	public static String getCurrentDateTimeStr(Date date){
		SimpleDateFormat sd = new SimpleDateFormat(TIMESTAMP);
		return sd.format(date);
	}
	/**
	 * 默认方式转换时间
	 * @param date
	 * @return
	 * @author caofan
	 * 2015年6月19日 上午11:31:59
	 */
	public static String getCurrentDateTimeStr(Date date,String format){
		SimpleDateFormat sd = new SimpleDateFormat(format);
		return sd.format(date);
	}
	/**
	 * 默认方式转换时间
	 * @param date
	 * @return
	 * @author caofan
	 * 2015年6月19日 上午11:31:59
	 */
	public static Date getCurrentDateTimeStr(String date,String format){
		SimpleDateFormat sd = new SimpleDateFormat(format);
		Date date2 = null;
		try {
			 date2= sd.parse(date);
		} catch (ParseException e) {
			e.printStackTrace();
			date2 = new Date();
		}
		return date2;
		 
	}

	/**
	 * 获取当前时间的下几个月的时间
	 * @return
	 * @author yanghao
	 * 2015年6月27日 下午3:34:08
	 */
	public static Date getNextMonth(int months){
		Calendar cal=Calendar.getInstance();
		cal.setTime(new Date());
		cal.add(Calendar.MONTH, months);
		return cal.getTime();
	}
	
	/**
	 * 获取输入的下几个月的时间
	 * @return
	 * @author caofan
	 * 2015年6月27日 下午3:34:08
	 */
	public static Date getNextMonthInput(Date date,int months){
		Calendar cal=Calendar.getInstance();
		cal.setTime(new Date());
		cal.add(Calendar.MONTH, months);
		return cal.getTime();
	}
	/**
	 * 获取下几个月的时间
	 * @param date
	 * @param months
	 * @return
	 * @author yanghao
	 * 2015年6月30日 下午2:37:56
	 */
	public static Date getNextMonth(Date date,int months){
		Calendar cal=Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.MONTH, months);
		return cal.getTime();
	}
	/**
	 * 获取下一天的时间
	 * @param date
	 * @param days
	 * @return
	 * @author caofan
	 * 2015年9月16日 上午11:47:02
	 */
	public static Date getNextDay(Date date,int days){
		Calendar cal=Calendar.getInstance();
		cal.setTime(date);
		cal.add(Calendar.DATE, days);
		return cal.getTime();
	}
	
	public static Date getNextDay(int days){
		Calendar cal=Calendar.getInstance();
		cal.setTime(new Date());
		cal.add(Calendar.DATE, days);
		return cal.getTime();
	}
	/**
	 * 返回YYYY-MM-DD日期
	 * @return
	 * @author yanghao
	 * 2015年6月27日 下午4:27:06
	 */
	public static String getCurrentDateTimeSimple(){
		SimpleDateFormat sd = new SimpleDateFormat(YYYYMMDD);
		return sd.format(new Date());
	}
	/**
	 * 自定义返回日期字符串
	 * @param date
	 * @param sdf
	 * @return
	 * @author yanghao
	 * 2015年7月3日 下午2:55:45
	 */
	public static String getDateSimple(Date date,String sdf){
		SimpleDateFormat sd = new SimpleDateFormat(sdf);
		return sd.format(date);
	}
	/**
	 * 获取两个日期相差时间，返回map值，key为day,hour,min
	 * @param d1
	 * @param d2
	 * @return
	 * @author yanghao
	 * 2015年6月30日 下午2:07:34
	 */
	public static Map<String,Object> getDiffTime(Date endDate,Date nowDate){
		long nd = 1000 * 24 * 60 * 60;
	    long nh = 1000 * 60 * 60;
	    long nm = 1000 * 60;
	    // long ns = 1000;
	    // 获得两个时间的毫秒时间差异
	    long diff = endDate.getTime() - nowDate.getTime();
	    // 计算差多少天
	    long day = diff / nd;
	    // 计算差多少小时
	    long hour = diff % nd / nh;
	    // 计算差多少分钟
	    long min = diff % nd % nh / nm;
	    // 计算差多少秒//输出结果
	    // long sec = diff % nd % nh % nm / ns;
	    Map<String,Object> map = new HashMap<String,Object>();
	    map.put("day", day>0?day:0);
	    map.put("hour", hour>0?hour:0);
	    map.put("min", min>0?min:0);
		return map;
	}
	/**
	 * 以yyyy-MM-dd HH:mm:ss返回date格式
	 * @param date
	 * @return
	 * @author yanghao
	 * 2015年7月4日 上午11:37:50
	 */
	public static Date getDateByStr(String date){
		SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try{
			return sd.parse(date);
		}catch(Exception e){
			return new Date();
		}
	}
	 public static int daysBetween(String begin,String end) throws ParseException{  
	        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");  
	        Calendar cal = Calendar.getInstance();    
	        cal.setTime(sdf.parse(begin));    
	        long time1 = cal.getTimeInMillis();                 
	        cal.setTime(sdf.parse(end));    
	        long time2 = cal.getTimeInMillis();         
	        long between_days=(time2-time1)/(1000*3600*24);  
	        return Integer.parseInt(String.valueOf(between_days));     
	    }  
	
	
}
